约 1960 字

约 10 分钟

#投影 Select-Object

Select-Object 用于从输入对象中选择属性、截取指定数量的对象、展开属性值,或通过计算属性创建新的对象。

#选择属性

使用 -Property 指定要保留的属性:

> Get-Process | Select-Object -Property ProcessName, Id, CPU

属性名支持通配符:

> Get-ChildItem | Select-Object -Property Name, Length
> Get-Process | Select-Object -Property *Path*
  • 输出是只包含所选属性的新对象。
  • 未选择的属性不会出现在结果中。

#截取对象

#-First 与 -Last

> Get-Process | Select-Object -First 5
> Get-Process | Select-Object -Last 5

#-Skip

跳过指定数量的对象:

> Get-Process | Select-Object -Skip 10

#-Unique

去除重复项:

> Get-ChildItem -File | Select-Object -Property Extension -Unique

#展开属性

-ExpandProperty 不只保留属性,而是直接返回属性值:

> Get-Process | Select-Object -ExpandProperty ProcessName
> Get-ChildItem | Select-Object -ExpandProperty Name
  • 展开后得到的是字符串、数字等原始值,而不是带有属性的对象。
  • 通常只展开一个属性;需要保留多个属性时使用 -Property。

#计算属性

使用哈希表定义计算属性,语法如下:

Select-Object -Property @{ Name = '名称'; Expression = { 表达式 } }

也可以使用简写 N 和 E:

> Get-Process | Select-Object -First 5 -Property ProcessName, @{ Name = 'MemMB'; Expression = { [math]::Round($_.WorkingSet64 / 1MB, 1) } }

在表达式中可以使用 $_ 引用当前对象:

> Get-ChildItem -File | Select-Object -Property Name, @{ Name = 'SizeKB'; Expression = { [math]::Round($_.Length / 1KB, 1) } }

#注意事项

  • -First、-Last、-Skip 按输入顺序截取对象,适合快速查看数据。
  • -ExpandProperty 返回原始值,后续命令将按值的类型处理。
  • 计算属性中的表达式在每处理一个对象时执行一次。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2